//package com.tanjun.publicservice.web.service.flowable.impl;
//
//import com.tanjun.common.exception.BizException;
//import com.tanjun.pubilcservice.response.workflow.ProcessDefineDto;
//import com.tanjun.publicservice.web.service.flowable.ProcessService;
//import lombok.SneakyThrows;
//import org.activiti.engine.RepositoryService;
//import org.activiti.engine.repository.Deployment;
//import org.activiti.engine.repository.ProcessDefinition;
//import org.apache.commons.io.IOUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.nio.charset.StandardCharsets;
//import java.util.List;
//import java.util.stream.Collectors;
//
//
//@Service
//public class ProcessServiceImpl implements ProcessService {
//    @Autowired
//    private RepositoryService repositoryService;
//
//
//     /**
//     * 部署流程
//     * @param userId 用户id
//     * @param processName 流程名称
//     * @param xml 流程定义文件内容
//     * @return 流程部署id
//     */
//     @Override
//    public String deploy(Object userId,String processName,String key, String xml) {
//        Deployment deployment = repositoryService.createDeployment()
//                .name(processName)
//                .key(key)
//                .addString(processName + ".bpmn20.xml",xml)
//                .deploy();
//        return deployment.getId();
//    }
//    /**
//     * 删除流程
//     * @param deploymentId 流程id
//     */
//    @Override
//    public void deleteByProcessId(String deploymentId) {
//       repositoryService.deleteDeployment(deploymentId);
//    }
//
//    /**
//     * 暂停流程
//     *
//     * @param deploymentId 流程id
//     */
//    @Override
//    public void stopProcess(String deploymentId) {
//        ProcessDefinition processDefinition= repositoryService.createProcessDefinitionQuery()
//                        .deploymentId(deploymentId)
//                .singleResult();
//        if(processDefinition==null){
//            throw new BizException("流程不存在");
//        }
//        if(processDefinition.isSuspended()){
//            throw new BizException("流程已暂停");
//        }
//        repositoryService.suspendProcessDefinitionById(processDefinition.getId());
//    }
//
//    /**
//     * 启动流程
//     *
//     * @param deploymentId 流程id
//     */
//    @Override
//    public void activeProcess(String deploymentId) {
//        ProcessDefinition processDefinition= repositoryService.createProcessDefinitionQuery()
//                .deploymentId(deploymentId)
//                .singleResult();
//        if(processDefinition==null){
//            throw new BizException("流程不存在");
//        }
//        if(!processDefinition.isSuspended()){
//            throw new BizException("流程已启动");
//        }
//        repositoryService.activateProcessDefinitionById(processDefinition.getId());
//    }
//
//    /**
//     * 获取流程定义
//     *
//     * @param deploymentId 定义id
//     * @return 返回流程定义基本信息
//     */
//    @Override
//    public ProcessDefineDto getProcessDefinition(String deploymentId) {
//        ProcessDefinition processDefinition= repositoryService.createProcessDefinitionQuery()
//                .deploymentId(deploymentId)
//                .singleResult();
//        if(processDefinition==null){
//            throw new BizException("流程不存在");
//        }
//        return convertToProcessDefineDto(processDefinition);
//    }
//
//    /**
//     * 获取流程定义xml
//     *
//     * @param deploymentId 流程id
//     * @return 返回流程定义xml内容
//     */
//    @Override
//    @SneakyThrows
//    public String getProcessDefinitionXML(String deploymentId){
//        ProcessDefinition processDefinition=
//                repositoryService.createProcessDefinitionQuery()
//                .deploymentId(deploymentId)
//                .singleResult();
//        if(processDefinition==null){
//            throw new BizException("流程不存在");
//        }
//        return IOUtils.toString(repositoryService.getProcessModel(processDefinition.getId()), StandardCharsets.UTF_8);
//    }
//
//    /**
//     * 获取所有流程定义
//     *
//     * @return 流程定义列表
//     */
//    @Override
//    public List<ProcessDefineDto> getAllProcessDefinitions() {
//        List<ProcessDefinition> list= repositoryService.createProcessDefinitionQuery().list();
//        return list.stream().map(this::convertToProcessDefineDto).collect(Collectors.toList());
//    }
//
//
//    private ProcessDefineDto convertToProcessDefineDto(ProcessDefinition processDefinition) {
//        ProcessDefineDto processDefineDto = new ProcessDefineDto();
//        processDefineDto.setId(processDefinition.getId());
//        processDefineDto.setCategory(processDefinition.getCategory());
//        processDefineDto.setName(processDefinition.getName());
//        processDefineDto.setKey(processDefinition.getKey());
//        processDefineDto.setVersion(processDefinition.getVersion());
//        processDefineDto.setResourceName(processDefinition.getResourceName());
//        processDefineDto.setDeploymentId(processDefinition.getDeploymentId());
//        processDefineDto.setDiagramResourceName(processDefinition.getDiagramResourceName());
//        processDefineDto.setSuspended(processDefinition.isSuspended());
//        return processDefineDto;
//    }
//
//}
